package horario.modelo.dao;

import horario.conexion.ConectaDB;
import horario.modelo.interfaces.UsuarioDAO;
import horario.recursos.beans.BeanUsuario;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;

public class MySQLUsuarioDAO implements UsuarioDAO {

    public boolean validar(ArrayList<BeanUsuario> listaUsuarios, String usuario, String password) throws Exception {
        boolean valido = false;

        for (BeanUsuario x : listaUsuarios) {
            if (x.getUsuario().equals(usuario) && x.getPassword().equals(password)) {
                return true;
            }
        }
        return valido;
    }

    public boolean validarConSP(BeanUsuario bean) throws Exception {
        boolean valido = false;
        int seleccionado = 0;

        Connection conn = new ConectaDB().getAcceso();
        String store = "{call SP_VALIDA_USUARIO(?,?)}";
        CallableStatement call = conn.prepareCall(store);
        call.setString(1, bean.getUsuario());
        call.setString(2, bean.getPassword());

        ResultSet res = call.executeQuery();
        if (res.next()) {
            seleccionado = res.getInt(1);
            if (seleccionado == 1) {
                valido = true;
            }
        }
        call.close();
        conn.close();

        return valido;
    }

    public ArrayList<BeanUsuario> listarUsuarios() throws Exception {
        ArrayList<BeanUsuario> lista = new ArrayList<BeanUsuario>();
        BeanUsuario bean = null;
        CallableStatement call = null;
        Connection conn = null;
        try {
            conn = new ConectaDB().getAcceso();
            String store = "{call SP_LISTAR_USUARIOS}";

            call = conn.prepareCall(store);
            
            ResultSet rs = call.executeQuery();
            System.out.println("1");
            while (rs.next()) {
                bean = new BeanUsuario(rs.getInt("idUsuario"),
                        rs.getString("usuario"),
                        rs.getString("password"));

                lista.add(bean);
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
                System.out.println("se cerro el call");
            }
            if (conn != null) {
                conn.close();
                System.out.println("se cerro el conn");
            }
        }




        return lista;
    }

    public int obtenerId(ArrayList<BeanUsuario> listaUsuarios, String usuario) throws Exception {
        int id = 0;
        for (BeanUsuario x : listaUsuarios) {
            if (x.getUsuario().equals(usuario)) {
                return x.getId();
            }
        }
        return id;
    }

    public boolean existeEntrada(int idUsuario, Date fecha) throws Exception {
        boolean existe = false;
        int seleccionado = 0;

        Connection conn = new ConectaDB().getAcceso();
        String store = "{call SP_OBTENER_ENTRADA_ID_FECHA(?,?)}";
        CallableStatement call = conn.prepareCall(store);
        call.setInt(1, idUsuario);
        call.setDate(2, fecha);
        ResultSet res = call.executeQuery();

        if (res.next()) {
            seleccionado = res.getInt(1);
            if (seleccionado != 0) {
                existe = true;
            }
        }

        call.close();
        conn.close();
        return existe;
    }
}
